<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:p="http://primefaces.org/ui"
                template="./template.xhtml">

    <ui:define name="title">
        DataTable - <span class="subitem">Dynamic Columns</span>
    </ui:define>

    <ui:define name="description">
        Columns of datatable can be created dynamically using the p:columns component.
    </ui:define>

    <ui:param name="documentationLink" value="/components/datatable" />

    <ui:define name="implementation">

        Available columns are "id","brand","year","color" and "price".
        
        <h:form id="form">    
            <h:panelGrid columns="3" style="margin:10px 0">
                <p:outputLabel for="template" value="Template:" style="font-weight:bold"/>
                <p:inputText id="template" value="#{dtColumnsView.columnTemplate}" size="50"/>
                <p:commandButton update="cars" action="#{dtColumnsView.updateColumns}" value="Update" process="@parent" icon="pi pi-refresh" oncomplete="PF('carsTable').clearFilters()"/>
            </h:panelGrid>

            <p:dataTable id="cars" var="car" value="#{dtColumnsView.cars}" widgetVar="carsTable" filteredValue="#{dtColumnsView.filteredCars}">                    
                <p:columns value="#{dtColumnsView.columns}" var="column" columnIndexVar="colIndex" sortBy="#{car[column.property]}" filterBy="#{car[column.property]}">
                    <f:facet name="header">
                        <h:outputText value="#{column.header}" />
                    </f:facet>
                    <h:outputText value="#{car[column.property]}" />
                </p:columns>
            </p:dataTable>
        </h:form>
        
    </ui:define>

</ui:composition>